\documentclass[a4paper]{article}
\usepackage[linesnumbered,ruled,vlined,algo2e]{algorithm2e}
% \SetAlgoLined：增添end行
% \DontPrintSemicolon：不显示行末尾的分号
% \SetKwInput{KwInput}{Input}：设置输入
% \SetKwInOut{KwInput}{Input}：设置输入输出
% ruled：标题左对齐，顶部和底部各添加一条线
% linesnumbered：显示行编号
\usepackage{ctex} %注意，这里必须引入ctex,否则中文内容无法输出
\SetKwRepeat{Do}{do}{while}

% 定义 Class 关键字
\SetKwProg{Class}{Class}{:}{}
% 定义方法关键字（可选）
\SetKwProg{Method}{Method}{:}{}

\begin{document}

\begin{algorithm2e}[H] % [H] 用于强制算法在这里定位，而不是浮动。
\renewcommand{\algorithmcfname}{算法}
    \SetAlgoLined
        \DontPrintSemicolon

        \SetKwFunction{Subtraction}{\textsc{Subtraction}} 
        \SetKwInOut{Input}{\textbf{Input}}
        \SetKwInOut{Output}{\textbf{Output}}		
        \Input{a,b,c}
        \Output{sub,n}
        
        $sub \gets 0, a \gets 6, b \gets 8$ \tcp*{初始化}
        \textsc{Subtraction}(sub, a, b) \\

        \SetKwFunction{FMain}{\emph{\textsc{Subtraction}}}
        \SetKwProg{Fn}{Function}{}{}
        \Fn{\FMain{sub, a, b}}{
                \If{a > b}
                {
                    sub $\gets$ a - b
                }
                \Else
                {
                    sub $\gets$ b - 1
                }
        }\textbf{end}

        \Do{<结束条件>}{<执行命令>}
        \caption{数学计算}
    \end{algorithm2e}
\begin{algorithm2e}[H]

% \SetAlgorithmName{算法}{算法}{算法列表}  % 中文标题

% \SetAlgorithmName{Procedure}{Procedure}{List of Procedures}  % 自定义英文标题
    \renewcommand{\thealgocf}{3-1} %自定义算法编号

		\caption{数学计算}
    % \renewcommand{\algorithmcfname}{算法}
	\SetAlgoLined
        \DontPrintSemicolon

        \SetKwFunction{Subtraction}{\textsc{Subtraction}} 
        % \SetKwInOut{Input}{\textbf{输入}}
        % \SetKwInOut{Output}{\textbf{输出}}	
        \SetKwInOut{KwIn}{\textbf{输入}}
        \SetKwInOut{KwOut}{\textbf{输出}}	
        % \KwIn{HIHI}
        \KwIn{input parameters A, B, C}%输入参数
	\KwOut{output result}%输出
		% \Input{a,b,c}
		% \Output{sub,n}
		
        $sub \gets 0, a \gets 6, b \gets 8$ \tcp*{初始化}
		\textsc{Subtraction}(sub, a, b) \\

        \SetKwFunction{FMain}{\emph{\textsc{Subtraction}}}
		\SetKwProg{Fn}{Function1}{}{}
		\Fn{\FMain{sub, a, b}}{
              \If{a > b}
		      {
                    sub $\gets$ a - b
		      }
		      \Else
		      {
                    sub $\gets$ b - 1
		      }
		}\textbf{end}

        \Do{<结束条件>}{<执行命令>}

	\end{algorithm2e}
 
\begin{algorithm2e}[H]

    \renewcommand{\thealgocf}{3-1} %自定义算法编号

		\caption{函数信息提取方法} %修改算法标题
	\SetAlgoLined
        \DontPrintSemicolon %不显示行末尾的分号

        \SetKwFunction{Subtraction}{\textsc{Subtraction}} 
        \SetKwInOut{Input}{\textbf{输入}}
        \SetKwInOut{Output}{\textbf{输出}}	
        
		\Input{ 源码AST抽象语法树根节点: node;}
		\Output{函数信息列表：functions;}
        $sub \gets 0, a \gets 6, b \gets 8$ \tcp*{初始化}
		\textsc{Subtraction}(sub, a, b) \\


        \SetKwFunction{FMain}{\emph{\textsc{Subtraction}}}
		\SetKwProg{Fn}{Function1}{}{}
		\Fn{\FMain{sub, a, b}}{
              \If{a > b}
		      {
                    sub $\gets$ a - b
		      }
		      \Else
		      {
                    sub $\gets$ b - 1
		      }
		}
        \textbf{end}

        \Class{Animal}{
            \tcp{属性}
            \textbf{Attribute}: name, startline,col\_offset,endline,is\_method,classname,closures,complexity; \\
            
            \tcp{构造函数}
            \Method{Animal(species, age)}{
                this.species $\leftarrow$ species\;
                this.age $\leftarrow$ age\;
            }
            
            \tcp{方法}
            \Method{makeSound}{
                输出 "未知声音"\;
            }
        }

        \Do{<结束条件>}{<执行命令>}

	\end{algorithm2e}
        
\end{document}
